package com.itheima.health.service.impl;

import com.itheima.health.dao.MemberDao;
import com.itheima.health.pojo.Member;
import com.itheima.health.service.MemberService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.text.SimpleDateFormat;
import java.util.*;

/**
 * 会员SERVICE实现类
 */
@Service
@Slf4j
public class MemberServiceImpl implements MemberService {
    @Autowired
    private MemberDao memberDao;

    /**
     * 获取会员饼状图
     */
    @Override
    @Transactional
    public Map<String, Object> getMemberReport() {
        //创建map集合用于封装返回到前端的数据
        Map<String, Object> map = new HashMap<>();
        //创建list集合，存储 拼装的年月数据
        List<String> months = new ArrayList<>();
        //获得日历对象,模拟时间就是当前时间
        Calendar calendar = Calendar.getInstance();
        //计算过去一年的12个月
        calendar.add(Calendar.MONTH, -12);//当前时间往前推12个月  就是  -12
        for (int i = 0; i < 12; i++) {  //循坏12次, 就会推12次  也就是1年
            calendar.add(Calendar.MONTH, 1);//当前时间往后推一个月
            Date date = calendar.getTime();//获取到每一个月的日期
            //         将日期显示到年.月就可以 不要日     2021.8      ...
            months.add(new SimpleDateFormat("yyyy.MM").format(date));
        }
        //把月份放到map中
        map.put("months", months);
        //通过月份查询用户
        List<Integer> memberCount = new ArrayList<>();
        for (String month : months) {
            String date = null;
            String[] strings = month.split("\\.");
            for (int i = 0; i < strings.length; i++) {
                String newMonth = strings[1];
                if (newMonth.equals("01") || newMonth.equals("03") || newMonth.equals("05") || newMonth.equals("07") || newMonth.equals("08") || newMonth.equals("10") || newMonth.equals("12")) {
                    date = month + ".31";//2022.8.31 传入SQL语句
                } else if (newMonth.equals("02")) {
                    date = month + ".28";
                } else {
                    date = month + ".30";
                }
            }
            Integer count = memberDao.findMemberCountBeforeDate(date);
            memberCount.add(count);
        }
        map.put("memberCount", memberCount);
        //返回结果
        return map;
    }


    /**
     * 根据手机号查询会员信息
     *
     * @param telephone 手机号
     */
    @Override
    public Member getOneMember(String telephone) {
        return memberDao.selectMemberByPhone(telephone);
    }

    /**
     * 用户注册
     *
     * @param member 会员信息
     */
    @Override
    @Transactional
    public void saveMember(Member member) {
        memberDao.insertMember(member);
    }


}
